/**
 * Spaces API 服务层
 * 封装所有与 Space 相关的 API 调用
 */
import { apiClient, ApiResponse } from './client';
import {
  SpaceDto,
  CreateSpaceRequest,
  UpdateSpaceRequest,
  ReorderSpacesRequest,
  DeleteResponse,
} from './types';

/**
 * 获取所有空间列表
 * GET /spaces
 */
export async function getSpaces(): Promise<SpaceDto[]> {
  const response = await apiClient.get<ApiResponse<SpaceDto[]>>('/spaces');
  return response.data.data || [];
}

/**
 * 获取单个空间详情
 * GET /spaces/{space_id}
 */
export async function getSpace(spaceId: number): Promise<SpaceDto> {
  const response = await apiClient.get<ApiResponse<SpaceDto>>(`/spaces/${spaceId}`);
  if (!response.data.data) {
    throw new Error('空间不存在');
  }
  return response.data.data;
}

/**
 * 创建新空间
 * POST /spaces
 */
export async function createSpace(data: CreateSpaceRequest): Promise<SpaceDto> {
  const response = await apiClient.post<ApiResponse<SpaceDto>>('/spaces', data);
  if (!response.data.data) {
    throw new Error('创建空间失败');
  }
  return response.data.data;
}

/**
 * 更新空间信息
 * PATCH /spaces/{space_id}
 */
export async function updateSpace(
  spaceId: number,
  data: UpdateSpaceRequest
): Promise<SpaceDto> {
  const response = await apiClient.patch<ApiResponse<SpaceDto>>(
    `/spaces/${spaceId}`,
    data
  );
  if (!response.data.data) {
    throw new Error('更新空间失败');
  }
  return response.data.data;
}

/**
 * 删除空间（软删除）
 * DELETE /spaces/{space_id}
 */
export async function deleteSpace(spaceId: number): Promise<void> {
  await apiClient.delete<ApiResponse<DeleteResponse>>(`/spaces/${spaceId}`);
}

/**
 * 重排序工作区
 * PATCH /spaces/reorder
 * @returns 返回被更新的 spaces 列表（不是全部，只是被排序的那些）
 */
export async function reorderSpaces(data: ReorderSpacesRequest): Promise<SpaceDto[]> {
  const response = await apiClient.patch<ApiResponse<SpaceDto[]>>('/spaces/reorder', data);
  return response.data.data || [];
}
